/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package memoriavirtual;

import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Pedro Freitas
 */
public class TP {

    private CelulaTP[] celulas;   
    private int tamanhoEndLogico; // tamanho do endereço lógico em bits
    
    
    public TP(int qtdPg, int tamanhoEndLogico) {
        this.celulas = new CelulaTP[qtdPg];
        this.tamanhoEndLogico = tamanhoEndLogico;   
        for(int i = 0; i < qtdPg; i++){
            this.celulas[i] = new CelulaTP(i, false, false,-1);
        }
    }

    public static int qtdIDPg(int qtdPg){
        return Integer.toBinaryString(qtdPg).length();  // quantidade de bits necessários pra identificar uma página
    }

    public int getTamanhoEndLogico() {
        return tamanhoEndLogico;
    }   

    public CelulaTP[] getCelulas() {
        return celulas;
    }

    public DefaultTableModel getTPModel() {
        DefaultTableModel resp = new DefaultTableModel();
        Object[] identificadores = {"Núm. Página","Modificado", "Presença", "Núm. Quadro"};
        resp.setColumnIdentifiers(identificadores);
        Object[] aux = new Object[4];
        
        for (int i = 0; i < celulas.length; i++) {
            aux[0] = celulas[i].getNumPg();
            aux[1] = (celulas[i].isM()) ? "1" : "0";
            aux[2] = (celulas[i].isP()) ? "1" : "0";
            aux[3] = celulas[i].getNumQuadro();
            resp.addRow(aux);
        }
        return resp;
    }
    
    public void atualizaCelulaTP(int numPg, char tipoInstrucao){
        if(tipoInstrucao == 'W')    celulas[numPg].setM();
        celulas[numPg].setP();
    }
    
     public void atualizaCelulaTP2(int numPg){        
        celulas[numPg].setP();
    }
    
}
